package chat.tools;

import chat.client.view.ClientView;
import chat.server.view.ServerView;

import javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 客户端业务工具类
 *
 * #1 提取了一些公用的方法
 *
 * @author 谈笑、
 * @dateTime 2020/10/21 16:35
 */
public class ServiceTools {

	/**
	 * 验证消息框输入
	 *
	 * #1 验证报文输入框内是否输入了数据
	 * #2 输入了内容返回true，没有输入内容返回false。
	 */
	public static boolean isJTextAreaInput(String data) {
		// 验证是否输入了内容
		if(!"".equals(data) && data != null) {
			// 没有输入内容
			return true;
		}
		// 输入了内容
		return false;
	}


	/**
	 * 验证配框输入
	 *
	 * #1 判断配置框内是否输入了配置信息
	 */
	public static boolean isJTextFieldInput(String ...data) {
		// 遍历每一个输入框
		for(int i = 0; i < data.length; i++) {
			// 判断输入框内是否输入数据
			if("".equals(data[i]) || data[i] == null) {
				// 其中有一个没有输入
				return false;
			}
		}
		// 全部都输入了
		return true;
	}


	/**
	 * 获取到当前时间
	 *
	 * #1 获取到当前时间并返回
	 */

	public static String getCurrentDateTime() {
		// 获取到当前时间
		return new SimpleDateFormat("yyyy-MM-hh HH:mm:ss").format(new Date());
	}


	/**
	 * 封装系统提示框
	 */
	public static void tipsFrame(JFrame jFrame, String tips) {
		// 弹出提示框
		JOptionPane.showMessageDialog(jFrame, tips, "提示", JOptionPane.ERROR_MESSAGE);
	}


	/**
	 * 封装系统确认框
	 */
	public static int confirmFrame(JFrame jFrame, String tips) {
		// 弹出确定框
		int result = JOptionPane.showConfirmDialog(jFrame, tips,"提示", JOptionPane.YES_NO_OPTION);
		// 返回结果
		return result;
	}


	/**
	 * 添加消息记录
	 *
	 * #1 向服务器的消息记录框内添加系统消息记录
	 */
	public static void addSystemNewsRecord(JTextArea jTextArea, String news) {
		jTextArea.append("[系统通知 " + ServiceTools.getCurrentDateTime() + "]：" + news + "\n");
	}


	/**
	 * 添加全部消息记录
	 *
	 * #1 向服务器的消息记录框内添加全部消息记录
	 */
	public static void addAllNewsRecord(ServerView serverView, String news) {
		// 判断消息模式
		if(serverView.getjRadioButtons()[1].isSelected()) {
			// 全部消息模式，将全部的消息添加到消息提示框内。
			serverView.getjTextArea().append(news + "\n");
		}
	}


	/**
	 * 设置启动服务后的窗体样式
	 */
	public static void setStartServerWindowStyle(ServerView serverView) {
		// 设置指示灯颜色
		serverView.getjLabels()[3].setBackground(serverView.getColors()[3]);

		// 禁用IP、Port输入框
		serverView.getjTextFields()[0].setEditable(false);
		serverView.getjTextFields()[1].setEditable(false);

		// 禁用启动服务按钮
		serverView.getjButtons()[0].setEnabled(false);

		// 启用停止服务按钮
		serverView.getjButtons()[1].setEnabled(true);
	}


	/**
	 * 设置停止服务后的窗体样式
	 */
	public static void setStopServerWindowStyle(ServerView serverView) {
		serverView.getjLabels()[3].setBackground(serverView.getColors()[2]);

		// 设置显示连接时长
		serverView.getjLabels()[6].setText("服务开启时长：服务未开启");

		// 启用IP、Port输入框
		serverView.getjTextFields()[0].setEditable(true);
		serverView.getjTextFields()[1].setEditable(true);

		// 禁用停止服务按钮
		serverView.getjButtons()[1].setEnabled(false);

		// 启用启动服务按钮
		serverView.getjButtons()[0].setEnabled(true);
	}


	/**
	 * 设置启动客户端后的窗体样式
	 */
	public static void setStartClientWindowStyle(ClientView clientView) {
		// 禁用IP地址、端口号和名称输入框
		clientView.getjTextFields()[0].setEditable(false);
		clientView.getjTextFields()[1].setEditable(false);
		clientView.getjTextFields()[2].setEditable(false);

		// 修改指示灯颜色
		clientView.getjLabels()[3].setBackground(clientView.getColors()[3]);

		// 禁用连接服务按钮
		clientView.getjButtons()[3].setEnabled(false);

		// 启用发送消息按钮
		clientView.getjButtons()[0].setEnabled(true);

		// 启用断开连接按钮
		clientView.getjButtons()[4].setEnabled(true);
	}


	/**
	 * 设置停止客户端后的窗体样式
	 */
	public static void setStopClientWindowStyle(ClientView clientView) {
		// 启用IP地址、端口号和名称输入框
		clientView.getjTextFields()[0].setEditable(true);
		clientView.getjTextFields()[1].setEditable(true);
		clientView.getjTextFields()[2].setEditable(true);

		// 修改指示灯颜色
		clientView.getjLabels()[3].setBackground(clientView.getColors()[2]);

		// 修改连接时长
		clientView.getjLabels()[7].setText("服务连接时长：未连接服务");

		// 禁用发送消息按钮
		clientView.getjButtons()[0].setEnabled(false);

		// 禁用断开连接按钮
		clientView.getjButtons()[4].setEnabled(false);

		// 启用连接服务按钮
		clientView.getjButtons()[3].setEnabled(true);
	}


}